package kuonjisai.swing;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

// 메뉴 작성법
// JMenuBar -> JMenu -> JMenuItem 



public class Swingmenu extends JMenuBar{

	private JMenu mnFile = null;			// 파일
	private JMenu mnEdit = null;		// 편집
	private JMenu mnView = null;		// 보기
	private JMenu mnTool = null;		// 도구
	private JMenu mnWnd = null;		// 창
	private JMenu mnHelp = null;		// 도움말

	private static SwingMenuActionListener mnal = null;
	
	public Swingmenu() {
		mnal = new SwingMenuActionListener();
		makeMenu();
		addShortCut();
		addMenu();
		
				
	}


	private void makeMenu() {
		
		mnFile = new JMenu(" 파 일(F) ");
		// mnFile.setFont(  new Font("맑은 고딕", Font.BOLD, 13) );
		// 메뉴 글꼴 변경을 위해 setFont 메서드 사용
		// 하지만, 모든 메뉴와 메뉴항목에 setFont를
		// 사용하는 것은 무척 번거로운 일임
		// 폰트를 다른것으로 바꾸기라도 한다면 ... ㅠㅠ
		// 따라서, 프로그램 전체 글꼴을 변경하는 방법을 이용
		// 메main 메서드에서  FontUIResource 이용함
		mnEdit = new JMenu( " 편 집(E) " );
		mnView = new JMenu( " 보 기(V) " );
		mnTool = new JMenu( " 도 구(T) " );
		mnWnd = new JMenu( " 창(W) " );
		mnHelp = new JMenu( " 도움말(H) " );
		makeMenuItem();
		
	}
	
	
	
	
	// 메뉴항목에 단축키 지정하는 메서드
	private void addShortCut() {
		mnFile.setMnemonic( KeyEvent.VK_F); //  alt + f 단축키 지정		
		mnEdit.setMnemonic( KeyEvent.VK_E);		
		mnView.setMnemonic( KeyEvent.VK_V);		
		mnTool.setMnemonic( KeyEvent.VK_T);		
		mnWnd.setMnemonic( KeyEvent.VK_W);		
		mnHelp.setMnemonic( KeyEvent.VK_H);		
	}
	
	// 생성 및 설정된 메뉴를 메뉴바에 추가 - 메뉴바에 추가하는 메서드
	private void addMenu() {
		add( mnFile );
		add( mnEdit );
		add( mnView );
		add( mnTool );
		add( mnWnd );
		add( mnHelp );
		
	}
	
	// 메뉴에 추가할 메뉴항목menuitem 생성 - 경로지정 및 세팅 메서드
	// 배열을 이용하면 쬐끔(?) 편해짐
	private JMenuItem makeMenuItems(
								String text, String img, int skey, boolean off, int akey  ){
		String icon = null;
		if ( img != null )
			
			icon = "/images/menu/" + img + ".png";
		
			
		JMenuItem mnitem = null;  // 메뉴항목
		try {
			mnitem = new JMenuItem( text, 
							new ImageIcon( getClass().getResource(icon))   );
		}
		catch( Exception ex ) {
			mnitem = new JMenuItem(text);
		}
		mnitem.setEnabled(off);		// 메뉴 활성/비활성
		mnitem.setMnemonic( skey );
		mnitem.setAccelerator( KeyStroke.getKeyStroke( akey, ActionEvent.CTRL_MASK ) ); //단축키
		
		
		// 이벤트 처리 관련 메서드 등록
		mnitem.addActionListener( mnal );
		mnitem.setActionCommand( img );
		return mnitem;
	}
	
	


	// 메뉴에 메뉴항목 추가 
	private void makeMenuItem(){
		
		
		mnFile.add( makeMenuItems("새 파일(N)	          ", "new", KeyEvent.VK_N, true,  KeyEvent.VK_1 ) );
			
		mnFile.addSeparator();
		mnFile.add( makeMenuItems("닫 기(C)", "close",  KeyEvent.VK_C, false,  KeyEvent.VK_2) );
		mnFile.addSeparator();
		mnFile.add( makeMenuItems("종 료(X)", "exit",  KeyEvent.VK_X, true,  KeyEvent.VK_3) );
		
		mnTool.add( makeMenuItems("설 정(D)	          ", "setting", KeyEvent.VK_D, true,  KeyEvent.VK_4 ) );
				
		mnHelp.add( makeMenuItems("프로젝트 정보 (I)", "about", KeyEvent.VK_I, true, 0 ) );
		
	}

	
	
	
	
} // class
